pragma circom 2.0.0;

include "comparators.circom";
include "bitify.circom";

template ExtractYearFromID() {
    signal input suffix;  // 身份证后12位
    signal output year;   // 提取的年份
    
    // 将suffix转换为二进制位
    component n2b = Num2Bits(40);  // 使用40位来确保足够存储12位数字
    n2b.in <== suffix;
    
    // 提取年份对应的位（假设年份在固定位置）
    component b2n = Bits2Num(16);  // 使用16位存储年份
    
    // 将相关位连接到年份转换器
    for (var i = 0; i < 16; i++) {
        b2n.in[i] <== n2b.out[i+8];  // 假设年份从第8位开始
    }
    
    year <== b2n.out;
}

template IDCardCheck() {
    signal input prefix;
    signal input suffix;
    signal input birthYear;
    signal output valid;
    
    // 提取年份
    component yearExtractor = ExtractYearFromID();
    yearExtractor.suffix <== suffix;
    
    // 比较年份
    component yearCheck = IsEqual();
    yearCheck.in[0] <== yearExtractor.year;
    yearCheck.in[1] <== birthYear;
    
    valid <== yearCheck.out;
} 